let obj = {
	name: 'OBJ',
	fn() {
		// 函数声明的 this 是在函数运行时指定的，指向的是调用它的那个对象，而不会向外层函数找 this。
		function f1() {
			// this == window 非严格模式下
			// this == undefined 严格模式下
			console.log(this.name) // undefined
		}

		f1()

		// 函数表达式的 this 是在函数运行时指定的，指向的是调用它的那个对象，而不会向外层函数找 this。
		let f2 = function () {
			// this == window 非严格模式下
			// this == undefined 严格模式下
			console.log(this.name)
		}

		f2()

		// 箭头函数没有自己的 this，它会向外层函数找 this。
		let f3 = () => {
			// this == obj fn 函数中的 this = obj
			console.log(this.name)
		}

		f3()
	},
}

obj.fn()

// f4 这个箭头函数在全局环境中，所以它使用全局环境的 this。
let f4 = () => {
	// this == window 非严格模式下
	// this == undefined 严格模式下
	console.log(this.name) // undefined
}

f4()
